import cv2
import numpy as np
# 图片操作
# image = cv2.imread("02.jpg")

# px = image[20,20]
# print(px)
# image.itemset((20,20,1),255)
# print(px)

# 图片属性
# print(image.shape)


# img.dtype获取图像数据类型
# img.size获取图像总像素数

# 截取ROI（rejion ）
# face = image[20 : 59,20:30]
# cv2.imshow("face",face)
# k =cv2.waitKey(0)
# if k ==ord("q"):
#     cv2.destroyAllWindows()

# 彩色图的BGR三个通道是可以分开单独访问的，也可以将单独的三个通道合并成一副图像
# 分别使用cv2.split()和cv2.merge()
# b,g,r = cv2.split(image)
# cv2.imshow("g",g)
# cv2.waitKey(0)
#也可使用此种方法：
# b = image[:,:, 0]
# cv2.imshow('blue', b)
# cv2.waitKey(0)


# 作业：圈出图片中红色的帽子
# ROI = image[25:120,50:220,2]#2表示为red通道
# cv2.imshow('red',ROI)
# cv2.waitKey(0)


# 追踪视频中蓝色的部分
capture = cv2.VideoCapture(0)

# 蓝色的范围，不同光照条件下不一样，可灵活调整
lower_blue = np.array([100, 110, 110])
upper_blue = np.array([130, 255, 255])

lower_green = np.array([50, 110, 110])
upper_green = np.array([70, 255, 255])

lower_red = np.array([160, 120, 120])
upper_red = np.array([179, 255, 255])

while(True):
    # 1.捕获视频中的一帧
    ret, frame = capture.read()

    # 2.从BGR转换到HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 3.inRange()：介于lower/upper之间的为白色，其余黑色
    mask_1 = cv2.inRange(hsv, lower_blue, upper_blue)
    mask_2 = cv2.inRange(hsv, lower_green, upper_green)
    mask_3 = cv2.inRange(hsv, lower_red, upper_red)
    # 4.只保留原图中的三原色部分
    mask = mask_1 + mask_2 + mask_3

    res = cv2.bitwise_and(frame, frame, mask=mask)

    cv2.imshow('frame', frame)
    cv2.imshow('mask', mask)
    cv2.imshow('res', res)

    if cv2.waitKey(1) == ord('q'):
        break
# 判断各种颜色范围（以蓝色为例）
# blue = np.uint8([[[255, 0, 0]]])
# hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
# print(hsv_blue)  # [[[120 255 255]]]